// NXTBrick.cpp : Defines the initialization routines for the DLL.
//

#include "stdafx.h"
#include "NXTBrick.h"
#include "error.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

//
//TODO: If this DLL is dynamically linked against the MFC DLLs,
//		any functions exported from this DLL which call into
//		MFC must have the AFX_MANAGE_STATE macro added at the
//		very beginning of the function.
//
//		For example:
//
//		extern "C" BOOL PASCAL EXPORT ExportedFunction()
//		{
//			AFX_MANAGE_STATE(AfxGetStaticModuleState());
//			// normal function body here
//		}
//
//		It is very important that this macro appear in each
//		function, prior to any calls into MFC.  This means that
//		it must appear as the first statement within the 
//		function, even before any object variable declarations
//		as their constructors may generate calls into the MFC
//		DLL.
//
//		Please see MFC Technical Notes 33 and 58 for additional
//		details.
//

// CNXTBrick construction

CNXTBrick::CNXTBrick() :
		m_Brick(&m_Bluetooth),
		m_LeftMotor(OUT_A,&m_Bluetooth),
		m_RightMotor(OUT_B,&m_Bluetooth),
		m_FireMotor(OUT_C,&m_Bluetooth)
{ 
}


bool CNXTBrick::ConnectToComPort(int iComPort)
{
	try
	{
		m_Bluetooth.connect(iComPort);
	}
	catch (Nxt_exception& e)
	{
		m_strLastErrorMsg = e.what();
		return false;
	}
	return true;
}


bool CNXTBrick::Stop()
{
	try
	{
		m_LeftMotor.stop();
		m_RightMotor.stop();
	}
	catch (Nxt_exception& e)
	{
		m_strLastErrorMsg = e.what();
		return false;
	}
	return true;
}

bool CNXTBrick::Drive(int iSpeedLeftMotor, int iSpeedRightMotor)
{
	try
	{
		m_LeftMotor.on(iSpeedLeftMotor);
		m_RightMotor.on(iSpeedRightMotor);
	}
	catch (Nxt_exception& e)
	{
		m_strLastErrorMsg = e.what();
		return false;
	}
	return true;
}


bool CNXTBrick::Fire()
{
	try
	{
		m_FireMotor.on(100,360,true);
	}
	catch (Nxt_exception& e)
	{
		m_strLastErrorMsg = e.what();
		return false;
	}
	return true;
}
bool CNXTBrick::SetMotorPorts(Motor_port portLeft, 
		Motor_port portRight, Motor_port portFire)
{
	try
	{
		m_LeftMotor = Motor(portLeft,&m_Bluetooth);
		m_RightMotor = Motor(portRight,&m_Bluetooth);
		m_FireMotor = Motor(portFire,&m_Bluetooth);
	}
	catch (Nxt_exception& e)
	{
		m_strLastErrorMsg = e.what();
		return false;
	}
	return true;}